AWS再入門2018 AWS Key Management Service編
こんにちは。池田です。「この投稿を公開したら今年のゴールデンウィークが始まるんだ...」と思いながら書いています。
この投稿では、データ保護に重要な役割を持つ暗号化技術を提供する、AWS Key Management Service(KMS)について、CloudTrailでどのように利用されるのかポイントをまとめてみます。
AWS Key Management Service(KMS)とは
暗号化キーを簡単に作成および管理できるマネージド型サービスです。 主に以下のような利点があります。
- フルマネージドサービスである
- 基盤の可用性、物理セキュリティ、ハードウェアの管理はAWSが担当
- 暗号化キーの一元管理ができる
- AWSマネジメントコンソールまたはAWS CLIやSDKからの管理が可能
- AWSの他のサービスと統合されている
- 対応したサービスのデータを簡単に暗号化できる
- 作成したマスターキーは、FIPS 140-2 検証済み暗号化モジュールによって保護される
AWS Key Management Service 概念
- カスタマーマスターキー(CMK) AWS KMSのプライマリリソース。通常、データを暗号化するために AWS KMSの外で使用するデータキーの生成、暗号化、復号に使用される。
- カスタマー管理のCMK ユーザが作成、管理、使用する。CMKの有効化と無効化、暗号化情報のローテーション、CMKへのアクセス管理や暗号化オペレーションでCMKを使用するIAM ポリシーとキーポリシーの確立が含まれる。
- AWS管理のCMK AWS KMSと統合しているAWSサービスがユーザーの代理として作成、管理、使用する。ユーザアカウントおよびリージョンに固有のもの。
- データキー 大量のデータや他のデータ暗号化キーといったデータを暗号化するための暗号化キー。 データキーを使用してデータを暗号化することはできず、アプリケーション内のデータキーを使用し管理する必要がある。
- エンベロープ暗号化 一意なデータキーでプレーンテキストデータを暗号化してから、データキーをキー暗号化キー(KEK)で暗号化する手法。
- 暗号化されたデータキーの保存場所について心配する必要がない。
- rawデータを保護するデータキーのみを再暗号化できる。
- 暗号化コンテキスト データに関する追加のコンテキスト情報を含めることができるキーと値のペア。
- 暗号化コンテキストはログに記録され、これを監査および AWS KMS API オペレーションへのアクセスを制御するときに使用できる。
- キーポリシー CMKを作成時に選択するを管理または使用できるユーザのアクセス権。 これを使用してカスタマー管理のCMKのアクセス権限を追加、削除、変更できるが、キーポリシーの編集はできない。
- 許可 キーポリシーに代わってアクセス権限を提供する別のメカニズム。 使用することでAWSプリンシパルでカスタマー管理型のCMKを使用できる長期のアクセスを付与することができる。
- 許可トークン CreateGrant APIリクエストへのレスポンスで受け取る。 これを使用してアクセス権限をより迅速に有効化できるよう、ユーザに関する情報が含まれる。
- CMK使用の監査 AWS CloudTrailを使用してキーの使用を監査できる。
- キー管理のインフラストラクチャ キー管理インフラストラクチャ(KMI)によるキーの保護。
AWS KMS マスターキーで実行できる管理操作
- マスターキーの作成、説明、一覧表示
- マスターキーの有効化と無効化
- マスターキーにアクセス許可ポリシーを作成し、アクセス権限を表示する
- マスターキーの暗号化マテリアルの自動ローテーションの有効化と無効化
- AWS KMS マスターキーに暗号化マテリアルをインポート
- 素早い識別、分類および追跡のためのマスターキーのタグ付け
- マスターキーに関連付けられるフレンドリ名としてのエイリアスの作成、削除、一覧表示、更新
- マスターキーを削除してキーのライフサイクルを完了する
AWS KMS マスターキーで実行できる暗号関数
- データの暗号化、復号、再暗号化
- プレーンテキストでサービスからエクスポートできるデータ暗号化キー、またはサービスから持ち出せないマスターキーで暗号化されたデータ暗号化キーの生成
- 暗号化アプリケーションに適したランダムな数値の生成
AWSサービスでのAWS KMSの使用方法
AWSサービスとAWS KMSを統合している場合、カスタマーマスターキー(CMK)を使用することでサービスがアクセスするデータを保護します。多くのAWSサービスが対応しているので、ここではCloudTrailを例に取り上げることにします。他のサービスについて知りたい場合はAWS サービスでの AWS KMS の使用方法を参照してください。
AWS CloudTrailでAWS KMSを使用する方法
AWS CloudTrailを使用すると、AWS API呼び出しやAWSアカウントのアクティビティを選択したAmazon Simple Storage Service(Amazon S3)バケット内のログファイルに保存できます。このときに、AWS KMSで管理されたキーによるサーバー側の暗号化(SSE-KMS)を選択することが可能です。 注意点として以下がアナウンスされています。
サーバー側の暗号化を有効にすると、ログファイルは暗号化されますが、SSE-KMSのダイジェストファイルは暗号化されません。ダイジェストファイルは、Amazon S3管理の暗号化キー(SSE-S3)で暗号化されています。
CMKに対し、CloudTrailログファイルの暗号化と復号化を許可するユーザを指定することで、当該ユーザがアクセスした際にS3を通じてシームレスに復号化が行われます。これにより、以下のメリットがあります。
- CMK暗号化キーは自分で作成して管理できます。
- 1つのCMKを使用して、すべての地域の複数のアカウントのログファイルを暗号化および復号化できます。
- CloudTrailログファイルを暗号化および復号化するために鍵を使用できるユーザを制御できます。要件に応じて、組織のユーザにキーのアクセス許可を割り当てることができます。
- セキュリティが強化されました。この機能では、ログファイルを読み込むために、次の2つの条件を満たす必要があります。
- S3バケットに対して読み取り権限を持っている必要があります。
- CMKポリシーによる解読許可が与えられている必要があります。
- S3では、CMKの使用を許可されたユーザからの要求に対するログファイルが自動的に解読されるため、CloudTrailログファイルのSSE-KMS暗号化は、CloudTrailログデータを読み取るアプリケーションと下位互換性があります。
CloudTrailログファイルのSSE-KMS暗号化を有効にするには、次の手順を行う必要があります。作業手順の詳細は公式ドキュメントにて確認してください。
- CMKを作成する
- CloudTrailで暗号化し、ユーザがログファイルを復号化できるようにするポリシーセクションをキーに追加する。
- CloudTrailのポリシーを変更したCMKを使用するように履歴を更新する。
CMKはいつ使用するか
AWS KMSによる CloudTrailログファイルの暗号化は、AWS KMSで管理されたキーによるサーバ側の暗号化(SSE-KMS)と呼ばれる Amazon S3の機能が基になっています。CloudTrail と Amazon S3 はそれらのサービスで以下のアクションを実行するときにCMKを使用します。
- CMKによってログファイルを暗号化するようにCloudTrailを設定する
- CloudTrailはGenerateDataKeyリクエストをAWS KMSに送信し、CMKが存在することと、暗号化にCMKを使用する権限がCloudTrailにあることを確認します。CloudTrailは、結果として生成されるデータキーは使用しません。
- CloudTrailが S3バケットにログファイルを置く
- CloudTrailがS3バケットにログファイルを置くたびに、Amazon S3はGenerateDataKeyリクエストをCloudTrailの代わりにAWS KMSに送信します。このリクエストに応答して、AWS KMSは一意のデータキーを生成し、データキーの2つのコピーを、1つはプレーンテキストで、もう1つは指定したCMKによって暗号化してAmazon S3に送信します。
- S3バケットから暗号化されたログファイルを取得する
- S3バケットから暗号化されたCloudTrailログファイルを取得するたびに、Amazon S3は自動的にDecryptリクエストをAWS KMSに送信し、ログファイルの暗号化されたデータキーを復号します。
まとめ
CloudTrailでのAWS KMS利用方法に限定して簡単にまとめてみましたが、深掘りするとかなりのボリュームになりそうなほど、公式ドキュメントに掲載されています。興味のある方はじっくり読んでみてはいかがでしょうか。AWSのセキュリティに対する取り組みの一環を感じ取れると思います。